package cfdt.common.vo;


import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.NumberUtil;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;

/**
 * 泛型分页对象
 * @param <T> 泛型类
 *
 * @author sven.wang
 * @since 2025/8/22 15:18
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageData<T> {

    /**
     * 分页信息(默认值)
     */
    private long total ;
    /**
     * 分页数据(默认空数组)
     */
    private List<T> list = CollUtil.newArrayList();

    /**
     * 是否为空
     * @return 是否为空
     */
    public boolean isEmpty() {
        return NumberUtil.compare(total, 0) <= 0 || CollUtil.isEmpty(this.list);
    }

    /**
     * 构建一个空的分页对象
     *
     * @param <T> 泛型类
     * @return 泛型分页对象
     */
    public static<T> PageData<T> empty() {
        return data(0L, CollUtil.newArrayList());
    }

    /**
     * 组装数据
     *
     * @param total 分页信息,总数
     * @param list 数据
     * @param <T> 泛型类
     * @return 泛型分页对象
     */
    public static <T> PageData<T> data(long total, List<T> list) {
        return new PageData<>(total, list);
    }

    /**
     * 组装数据,将一个类型的分页数据转换为另一个类型的分页数据
     *
     * @param list 数据
     * @param <T> 泛型类
     * @param <R> 泛型类
     * @return 泛型分页对象
     */
    public static <T, R> PageData<T> data(PageData<R> page, List<T> list) {
        return data(page.getTotal(), list);
    }

}
